Computer systems may be coupled together in various ways to enable communications between them, including being coupled together in networks such as local area networks (LANs), wide area networks (WANs), or combinations of networks, such as the Internet. Data may be transferred (e.g., copied or moved) between computer systems in various ways. For example, a computer system may include an “agent” configured to perform data transfers with other computer systems. For instance, a first computer system, which may be referred to as a “client,” may include a “client agent” configured to request data from a “server agent” located at a second computer system, referred to as a “server.” Communications may occur in both directions between the first computer system and the second computer system, such that each of the first and second computer systems may be considered to be the client in some communications, and may be considered to be the server in other communications.
An example of a distributed system of computers is a service-oriented architecture (SOA) system. The SOA provides techniques for systems development and integration. Typically, functionality is grouped around business processes, which may be packaged as interoperable services. A SOA infrastructure allows different applications to exchange data with one another as they participate in business processes. Service-orientation aims at a loose coupling of services with operating systems, programming languages and other technologies which underlie the different applications.
Loosely-coupled distributed systems based in architecture styles such as SOA face challenges when it comes to interaction between the development environments used to build the nodes that make up the system. When agents in a system exchange data, each agent preferably represents that data as instances of known data types, which enables the development environment to validate the structure and constraints of the data (e.g. data types), as well as assist the developer through the knowledge of those types. Many technologies depend on type information, including IntelliSense® and LINQ (language integrated query), both developed by Microsoft Corporation of Redmond, Wash.
However, extensive use of common data types introduces increased coupling between agents in a data communication system. For example, the use of common data types typically prevents client and server applications from being developed independently or from using different conventions or type hierarchies, and does not allow them to version independently. SOAP (originally defined as Simple Object Access Protocol) stacks allow for a varying level of flexibility when it comes to exposing “proxy” types for the data types received at client from a server, as defined in the server-provided metadata document (typically a “WSDL” (Web Services Description Language) file). However, this is still a form of mapping and it still requires the client to know the original type names and hierarchy in order to map them back before interacting with the server.